package com.ysd.twocrm.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ysd.twocrm.entity.UserRoles;
import com.ysd.twocrm.entity.Users;
import com.ysd.twocrm.mapper.UserRolesMapper;
import com.ysd.twocrm.mapper.UsersMapper;
import com.ysd.twocrm.service.UsersService;
import com.ysd.twocrm.utils.LayuiUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

@Service
public class UsersServiceImpl implements UsersService {
    @Autowired
    private UsersMapper usersMapper;
    @Autowired
    private UserRolesMapper userRolesMapper;
    /*
     * @Description 多条件分页查询    根据用户名查、根据姓名查、创建时间的开始与结束时间、是否锁定查
     * @param page 分页页码
     * @param u  用户条件
     * @return com.ysd.twocrm.utils.LayuiUtils<com.ysd.twocrm.entity.Users> 返回layui要的格式数据
     * @author liusupeng
     * @date 2020/4/10 17:36
     */
    @Override
    public LayuiUtils<Users> USERS_LAYUI_UTILS(Integer page, Users u) {

        LayuiUtils<Users> layuiUtils=new LayuiUtils<Users>();
        Page<Users> page1=new Page<Users>(page,10);//分页
        QueryWrapper<Users> queryWrapper=new QueryWrapper<Users>();//多条件

        queryWrapper.ne("IsUserRoleId",0);//不等于0也就是除了管理员都查
        if(u.getUserIsLockOut()!=null){
            queryWrapper.eq("userIsLockOut",u.getUserIsLockOut());
        }
        if(u.getUserName()!=null){
            queryWrapper.like("userName",u.getUserName());
        }
        if(u.getUserLoginName()!=null){
            queryWrapper.like("userLoginName",u.getUserLoginName());
        }
        if(u.getUserCreateTime()!=null&&u.getUserLastLoginTime()!=null){
            queryWrapper.between("userCreateTime",u.getUserCreateTime(),u.getUserLastLoginTime());
        }
        Page<Users> usersPage = usersMapper.selectPage(page1, queryWrapper);
        layuiUtils.setCount(usersPage.getTotal());//总条数
        layuiUtils.setData(usersPage.getRecords());//数量

        return layuiUtils;
    }

    /*
     * @Description  根据用户登录名或者邮箱或者手机号来查询是否存在，用于验证
     * @param u
     * @return java.util.List<com.ysd.twocrm.entity.Users>
     * @author liusupeng
     * @date 2020/4/12 14:59
     */
    @Override
    public List<Users> getAllIfUsersTrue(Users u) {
        QueryWrapper<Users> queryWrapper=new QueryWrapper<Users>();
        //根据登录名判断
        if(u.getUserLoginName()!=null){
            queryWrapper.eq("userLoginName",u.getUserLoginName());
        }
        //邮箱
        if(u.getUserProtectMail()!=null){
            queryWrapper.eq("userProtectMail",u.getUserProtectMail());
        }
        //手机号
        if(u.getUserProtectMtel()!=null){
            queryWrapper.eq("userProtectMtel",u.getUserProtectMtel());
        }
        return usersMapper.selectList(queryWrapper);
    }

    @Override
    public Users getAllUsersById(Integer userId) {
        return usersMapper.selectById(userId);
    }

    /*
     * @Description 根据邮箱或者用户名或者名字或者密码或者性别或者手机号来修改
     * @param u 用户
     * @return java.lang.Integer
     * @author liusupeng
     * @date 2020/4/12 20:56
     */
    @Override
    public Integer exitUserMessage(Users u) {

        return usersMapper.updateById(u);
    }

    @Override
    public LayuiUtils<Users> findLayuiUtils(Integer page, String userName, String roleName) {
        QueryWrapper<Users> queryWrapper=new QueryWrapper<Users>();

        Page<Users> page1=new Page<>(page,10);
        Page<Users> selectconsoler = usersMapper.selectconsoler(page1, userName, roleName);
        LayuiUtils<Users> layuiUtils=new LayuiUtils<Users>();
        layuiUtils.setData(selectconsoler.getRecords());//总数据
        layuiUtils.setCount(selectconsoler.getTotal());//总条数

        return layuiUtils;
    }

    @Override
    public LayuiUtils<Users> layuiCounselor(Integer page, Users u) {
        QueryWrapper<Users> queryWrapper=new QueryWrapper<Users>();
        Page<Users> page1=new Page<Users>(page,10);
         queryWrapper.eq("IsCounselor",u.getIsCounselor());
        if(u.getUserName()!=null){
            queryWrapper.like("userName",u.getUserName());
        }
        Page<Users> usersPage = usersMapper.selectPage(page1, queryWrapper);
        LayuiUtils<Users> layuiUtils=new LayuiUtils<Users>();
        layuiUtils.setData(usersPage.getRecords());
        layuiUtils.setCount(usersPage.getTotal());
        return layuiUtils;
    }

    @Override
    public Integer randomCounselor(String time) {
        List<UserRoles> userRoles = userRolesMapper.USER_ROLES(time);//倒序查询全部咨询师（按权重）
        List<Integer> integerList=new ArrayList<>();
        for(UserRoles ur :userRoles){
            integerList.add(ur.getUserId());//将用户id存到新的集合里
        }
            List<Integer> interrandomlist=new ArrayList<>();//存比例用户的集合

        for(int i=0;i<integerList.size();i++){
            for(int j=integerList.size();j>i;j--){
                interrandomlist.add(integerList.get(i));
            }
        }
        Random random=new Random();
//取了巧，如果这里随机数放了10 那么他获取的就是0-9正好和数组对应
        int i1;
           try {
               //这里要加个trycatch，因为如果这个集合里面没有值，他是个0，那么我们随机数对0来进行生成的话会报错。
               //如果他是0，那说明他肯定没值，所以无需管他
                i1 = random.nextInt(interrandomlist.size());
           }catch (Exception e){
               return null;
           }
        return interrandomlist.get(i1);
    }
}
